/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanelCompraWeb.java
 *
 * Created on Aug 29, 2010, 12:33:27 PM
 */

package administrador;

import java.sql.*;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import javax.swing.table.*;

/**
 *
 * @author daniel1.Silva
 */
public class PanelCompraWeb extends javax.swing.JFrame {
    javax.swing.JTable tabla;
    JScrollPane js;
    Conexion conexionWeb;
    Conexion conexionLocal;
    KardexInOut kio;
    int bodega;
    String detalleReempWeb;
   

    /** Creates new form PanelCompraWeb */
    public PanelCompraWeb(Conexion cEnt,int bodegaInt,KardexInOut kio) {
        conexionLocal=cEnt;
        this.kio=kio;
        bodega=bodegaInt;
        configuroVentana();
        
    }
    public void configuroVentana(){
        initComponents();
        this.setBounds(100,100,800,300);
        this.setVisible(true);
        muestroFacturasWeb();

     }

    public void muestroFacturasWeb(){
         //Tomando la base de datos de la computadora local y su base de datos se Actualizara la base del Internet
          String IPCliente ="174.136.152.21";// "174.136.152.21";
          String nombre = "sexyusuario";//"daniel1";
          String password = "yxes1984";
          String dbcliente = "sexylocuras";
          String puerto = "3306";
         

          //Realizo la conexion a la base de datos cliente:
          conexionWeb = new Conexion();

          //Id de Establecimiento en la bodega:
          String idEstablecimiento=String.valueOf(bodega);    //mismos que los otros pero con
                                            //el 2 adelante

          if (!conexionWeb.conectarBase(nombre, password, puerto, dbcliente, IPCliente)) {
             //System.out.println("No pudo establecer la conexion primera");
             // JOptionPane.showMessageDialog(panelAct, "No se pudo establecer conexion con la base de datos del Internet !!", "Informacion", JOptionPane.WARNING_MESSAGE);

          } else {

              ResultSet rs=conexionWeb.consultarBase("SELECT cod_factura,id_local as 'Local',observacion,sum(cantidad) as 'CantProductos',fecha_envio FROM `sexylocuras`.`envio` where descargado=0 and id_local="+bodega+"  group by cod_factura order by fecha_envio;");
              muestroTabla(rs,conexionWeb);
          }




    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(administrador.AdministradorApp.class).getContext().getResourceMap(PanelCompraWeb.class);
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel1.border.title"))); // NOI18N
        jPanel1.setName("jPanel1"); // NOI18N
        jPanel1.setLayout(new java.awt.BorderLayout());
        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
    * @param args the command line arguments
    */
//    public static void main(String args[]) {
//        java.awt.EventQueue.invokeLater(new Runnable() {
//            public void run() {
//                new PanelCompraWeb().setVisible(true);
//            }
//        });
//    }

     public void muestroTabla(ResultSet respuesta,Conexion conexion){
     //Obtengo Filas-Arreglo de Titulos de Columnas
        int filas=conexion.obtenerFilas(respuesta);
        String[] titulosCol=conexion.obtenerColumnas(respuesta);
        //Creo la tabla:
        CrearTabla(filas,titulosCol);
        llenaTabla(respuesta,titulosCol.length,filas);
    }


    public void CrearTabla(int filas,String[] titulos){

        int columnas=titulos.length;
        String[][] tabla0=new String[filas][columnas];

        tabla= new JTable(tabla0,titulos);

        //Aqui le especifico para que la tabla acepte valores doubles e int:
        //--------------------------------------------------------------------
        final boolean[] canEdit = new boolean [columnas];
        for(int p=0;p<columnas;p++){
        canEdit[p]=false;
        }
        tabla.setModel(new javax.swing.table.DefaultTableModel(
            tabla0,titulos
        ) {
           // boolean[] canEdit = new boolean [] { false, false, false, false};

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        //---------------------------------------------------------------------

        //Le doy el evento del LCick del Mouse:
        tabla.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaMouseClicked(evt);
            }
        });

        //remuevo el JScroll para que no se monte cuando cree el nuevo:
        //*************************************************************
        try{
        jPanel1.remove(js);
        }catch(java.lang.NullPointerException e){}
        //*************************************************************

        //Pongo en la tabla:
            js = new JScrollPane(tabla);

            js.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(198, 196, 196)));
            js.setBounds(20, 20, 750, 280);
            js.setVisible(true);
            jPanel1.add(js);
            js.updateUI();
       //Para que no puedan mover las Columnas:
        tabla.getTableHeader().setReorderingAllowed(false) ;
    }

     public void llenaTabla(ResultSet r,int columnas,int filas){
        try{
            r.beforeFirst();

            int j=0;
            while(r.next()) {

                for(int i=0;i<columnas;i++) {

                    Object toma=r.getObject(i+1);
                    //System.out.println("toma valor:"+toma+" * fila:"+j+" * column:"+i);
                    try{
                        tabla.setValueAt(toma,j,i);
                    }catch(java.lang.ArrayStoreException e){
                        System.out.print("Errrrorrr");
                        tabla.setValueAt("null",j,i);
                    }
                }

                j++;
            }
        }catch(SQLException sqle){
           //System.out.println("Error al mostrar los datos");
            System.err.println(sqle);
        }

    }


     private void tablaMouseClicked(java.awt.event.MouseEvent evt) {
    // Evento del click del mouse sobre la tabla:
         int fila=tabla.getSelectedRow();
         int codigoFact=Integer.parseInt(tabla.getValueAt(fila,0).toString());
        //System.out.println("Click en la Fila :"+fila+" cant="+codigoFact);
         this.detalleReempWeb="";

         cargoFactura(codigoFact);

         //Quito la posibilidad de modificacion:
         kio.bt_ap.setEnabled(false);
         kio.bt_borrar.setEnabled(false);

         kio.txt_porIva.setText("12");
         kio.actualizoTotales();


    }

     public void cargoFactura(int codigo){
     //Cargo la factura Web a la factura local:

      int opccion=0;
        opccion=JOptionPane.showConfirmDialog(this,"Seguro Desea Cargar la Factura #"+codigo,"Alerta",0);
        if(opccion==0){


            //Consulto los datos de la factura:
            ResultSet r=conexionWeb.consultarBase("SELECT cod_producto,cod_categoria,nombre,descripcion,cantidad,precio_normal,precio_costo FROM envio where cod_factura="+codigo+";");
            int numProdDescargar=conexionWeb.obtenerFilas(r);

            try {
                r.beforeFirst();

                //Comienzo el detalle Reemplazar
                this.detalleReempWeb=detalleReempWeb+"********* Actualiza **************\nReemplazos Realizados:\n";
           



                String actualizacionProductos="";

                //saco el Detalle de la Factura:
                while (r.next()) {
                    String codigoPro=r.getString(1);
                    int catPro=r.getInt(2);
                    String nombre=r.getString(3);
                    //Quito Caracteres Erroneos:
                        nombre=nombre.replaceAll(";","");
                        nombre=nombre.replaceAll("'","");
                        

                    String descripcion=r.getString(4);
                    int cantPro=r.getInt(5);
                    double precnPro=r.getDouble(6);
                    double preccPro=r.getDouble(7);

                    String fecha=new java.sql.Date(System.currentTimeMillis()).toString();


                    //Pregunto si el Producto Existe en la base local:
                    ResultSet rl=conexionLocal.consultarBase("SELECT * FROM producto p where cod_producto like '"+codigoPro+"';");
                    int filas=conexionLocal.obtenerFilas(rl);
                    rl.beforeFirst();
                    rl.next();
                    

                    //Saco los datos anteriores y los almaceno
                    int catAnt=0;
                    String nomAnt="";
                    String desAnt="";
                    int cantAnt=0;
                    double precAnt=0;
                    if(filas>0){
                     catAnt=rl.getInt(2);
                     nomAnt=rl.getString(3);
                     desAnt=rl.getString(4);
                     cantAnt=rl.getInt(5);
                     precAnt=rl.getDouble(6);
                    }

                    //Quito el Evento de la Tabla
                    kio.eventoTabla=false;//Quito el evento en la tabla.

                    if(filas>0){
                    //Existe Producto

                   
                        //Lleno la fila en la factura:
                        int filaactual=kio.cuentaFilaOcupadas();
                 
                        kio.tabla.setValueAt(codigoPro, filaactual,0);
                        kio.tabla.setValueAt(cantPro, filaactual,1);
                        kio.tabla.setValueAt(nombre, filaactual,2);
                        kio.tabla.setValueAt(preccPro, filaactual,3);
                        kio.tabla.setValueAt(precnPro, filaactual,4);
                        //Calculo Subtotal:
                        kio.actualizoSubtotal(cantPro,filaactual);

                        


                        //Si existe tengo que actualizar los datos:.
                        //Guardo la actualizacion para hacerlo luego
                            actualizacionProductos=actualizacionProductos+"update producto set nombre='"+nombre+"', descripcion='"+descripcion+"', precio_normal='"+precnPro+"',precio_costo='"+preccPro+"',cod_categoria="+catPro+"  where cod_producto='"+codigoPro+"';";
                            
                            if(nomAnt.equals(nombre)&&precAnt==precnPro){}else{
                            //Saco el reporte de reemplazos para verificacion:codigoPro
                            this.detalleReempWeb=detalleReempWeb+"\n";
                            this.detalleReempWeb=detalleReempWeb+"## Codigo:"+codigoPro+" |";
                            this.detalleReempWeb=detalleReempWeb+"| Cat:"+catAnt+"=>"+catPro+" |";
                            this.detalleReempWeb=detalleReempWeb+"| Nom: "+nomAnt+" => "+nombre+" |";
                            if(descripcion.length()<31){

                            }else
                            {
                                descripcion=descripcion.substring(0, 30);
                            }
                            this.detalleReempWeb=detalleReempWeb+"| Desc: "+desAnt+" => "+descripcion+" |";
                            this.detalleReempWeb=detalleReempWeb+"\n| Prec: "+precAnt+" => "+precnPro+"";
                            }


                            //Inserto Nuevo Detalle de Bodega:
                            ResultSet rs=conexionLocal.consultarBase("select count(*) from itm_bodega where cod_producto like '"+codigoPro+"';");
                            rs.beforeFirst();
                            rs.next();
                            int filaITM=rs.getInt(1);
                            if(filaITM>0){

                            }else{
                            conexionLocal.insertarDatos("insert into itm_bodega values("+bodega+",'"+codigoPro+"',0,5)");
                            }

                    }else{
                    //No Existe
                            //Creo el Producto
                            conexionLocal.insertarDatos("insert into producto values('"+codigoPro+"',"+catPro+",'"+nombre+"','"+descripcion+"',"+cantPro+","+precnPro+",5,"+preccPro+",'"+fecha+"',0)");
                            //Inserto Nuevo Detalle de Bodega:
                            conexionLocal.insertarDatos("insert into itm_bodega values("+bodega+",'"+codigoPro+"',0,5)");



                        //Lleno la fila en la factura:


                        int filaactual=kio.cuentaFilaOcupadas();
                        filaactual++;
                      
                        kio.tabla.setValueAt(codigoPro, filaactual,0);
                        kio.tabla.setValueAt(cantPro, filaactual,1);
                        kio.tabla.setValueAt(nombre, filaactual,2);
                        kio.tabla.setValueAt(preccPro, filaactual,3);
                        kio.tabla.setValueAt(precnPro, filaactual,4);
                        //Calculo Subtotal:
                        kio.actualizoSubtotal(cantPro,filaactual);
                       

                    }


                }
                this.detalleReempWeb=detalleReempWeb+"\n***********************************\n";

                //Guardo el reporte de reemplazos y creaciones:

                kio.descripcionReemplazos=detalleReempWeb;

                //Reestablezco el evento en la tabla.
                kio.eventoTabla=true;

                //Actualizo Totales:
                kio.actualizoTotales();

                //Pongo los datos de la Descarga:
                String fecha=new java.sql.Date(System.currentTimeMillis()).toString();
                //Saco el nombre de la Bodega:
                ResultSet rs=conexionLocal.consultarBase("SELECT * FROM `bdmultiadmin`.`bodega` where cod_bodega="+bodega+";");
                rs.beforeFirst();
                rs.next();
                String nombreBodega=rs.getString(2)+" "+rs.getString(3);


                //Chequeo que todos los productos esten llenados
               //System.out.println("Se debia llenar:"+numProdDescargar+" filas y se ocuparon: "+kio.cuentaFilaOcupadas());
                    if(numProdDescargar==kio.cuentaFilaOcupadas()){
                    String[] actualizaciones=actualizacionProductos.split(";");

                        //Bucle de Actualizaciones:
                        int actExitosas=0;
                        for (int n = 0; n < actualizaciones.length; n++) {
                            boolean exitoA = conexionLocal.insertarDatosR(actualizaciones[n]);
                            if (exitoA) {
                                actExitosas++;
                            }
                        }
                        //Realiza cierra si todo fue exitoso
                        if (actExitosas == actualizaciones.length) {
                            //conexionWeb.actualizarBase("update envio set fecha_descarga='" + fecha + "',bodega_nombre='" + nombreBodega + "',descargado='1',detActualizacion='" + this.detalleReempWeb + "' where cod_factura=" + codigo + ";");
                            kio.facturaCargada=codigo;
                          
                        }
                        else{
                        JOptionPane.showMessageDialog(kio, "No se lleno el total de productos Web, Por Favor intente cargar nuevamente!!", "Informacion", JOptionPane.WARNING_MESSAGE);
                        kio.limpiar();
                        }
                    
                    
                    }else{
                    JOptionPane.showMessageDialog(kio, "No se lleno el total de productos Web, Por Favor intente cargar nuevamente!!", "Informacion", JOptionPane.WARNING_MESSAGE);
                    kio.limpiar();
                    }


                 //Cierro Conexion Web:
                try {
                    conexionWeb.cerrarConexion();
                } catch (Exception ex) {
                    Logger.getLogger(PanelCompraWeb.class.getName()).log(Level.SEVERE, null, ex);
                }
                //Cierro Esta Ventana:
                this.dispose();



            } catch (SQLException ex) {
                Logger.getLogger(PanelCompraWeb.class.getName()).log(Level.SEVERE, null, ex);
            }


        }
     };

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel jPanel1;
    // End of variables declaration//GEN-END:variables

}
